home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
LOM
/
LOMGfxMaker.AMOS
/
LOMGfxMaker.amosSourceCode
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1996-02-20
|
36.7 KB
|
1,503 lines
' *************************************
' * *
' * LOMGfxMaker V1.0 *
' * Written by Chris Hodges *
' * *
' *************************************
'
Set Buffer 80
If Screen<>-1 Then Screen Close 0
MXFILES=200
Dim FIL$(MXFILES)
Dim FB(60,4),FB$(60),DIT(3,7)
Global FB(),FB$()
TH=8
Global TH
Gosub INIT
Gosub MAIN
End
MAIN:
Do
Gosub EVENTLOOP
If BT=27 Then Gosub LOAIFF
If BT=29 Then Gosub LOAGEDA
If BT=30 Then Gosub SAVGEDA
Exit If BT=25 or BT=31
Loop
Return
EVENTLOOP:
OMK=MK
Screen 0
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If I$="" Then Multi Wait
BT=0
If YM=0 : I$=Cup$ : End If
If YM>84
If XM=0 : I$=Cleft$ : End If
If XM=638 : I$=Cright$ : End If
If YM=260 : I$=Cdown$ : End If
Else
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,25,59]
BT=Param
End If
End If
If BT=26 Then Amos To Back
Return
INIT:
FIFF$="dh1:Grafik/DPaint/Picture/"
FGED$="dh1:LOM/Visuals/"
Screen Open 0,640,84,4,$8000
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display 0,128,40,320,84
Wait Vbl
Limit Mouse
Gosub CREATEMAINSCREEN
Restore DITHER
For Y=0 To 7
For X=0 To 3
Read DIT(X,Y)
Next
Next
Return
DITHER:
Data $0,$8,$2,$A
Data $C,$4,$E,$6
Data $3,$B,$1,$9
Data $E,$7,$D,$5
Data $5,$C,$E,$3
Data $8,$0,$6,$A
Data $D,$2,$4,$E
Data $7,$B,$9,$1
CREATEMAINSCREEN:
Screen 0
Gr Writing 0
Cls 0
DEFCLOWIN[25,0,0]
TEXBOX[19,0,616,10,0,"LOMGfxMaker by Chris Hodges."]
DEFSCRTBK[26,617,0]
FILBOX[0,11,639,83,0]
DEFTEX[27,4,13,84,23,"Load ILBM",1]
DEFTEX[28,4,25,84,35,"Save ILBM",1]
DEFTEX[29,4,37,84,47,"Load GEDA",1]
DEFTEX[30,4,49,84,59,"Save GEDA",1]
DEFTEX[31,4,61,84,71,"Quit",1]
DEFTEX[37,177,13,314,23,"Histogramm",1]
DEFTEX[38,177,25,314,35,"Optimize",1]
DEFTEX[39,177,37,314,47,"Reduce Colors",1]
DEFTEX[40,177,49,314,59,"Remap to Palette",1]
DEFTEX[41,177,61,314,71,"Edit Palette",1]
DEFBOX[60,4,73,635,81,0]
DEAGAD[28]
DRAPROCBAR[60,1,1]
Return
LOAIFF:
FILEREQ[-1,480,160,-1,"Select an IFF-ILBM file to load", Extension_8_02F0(FIFF$), Extension_8_03E0(FIFF$),"","Load","Abort","","P"]
If Param$="" Then Return
FIFF$=Param$
If Exist(FIFF$)=0
REQUEST["File does not exist!","Sorry."]
Return
End If
Trap Extension_8_0456 FIFF$,9
If Errtrap
REQUEST["Error while loading iff file!","What a pity :-("]
Return
End If
Gosub REACHUNKY
If CAMG and $800
REQUEST["This is a HAM picture!","Proceed"]
End If
Screen 0
Gosub GREY
Return
LOAGEDA:
FILEREQ[-1,480,160,-1,"Select an IFF-GEDA file to load", Extension_8_02F0(FGED$), Extension_8_03E0(FGED$),"","Load","Abort","","P"]
If Param$="" Then Return
FGED$=Param$
If Exist(FGED$)=0
REQUEST["File does not exist!","Sorry."]
Return
End If
Trap Extension_8_0456 FGED$,9
If Errtrap
REQUEST["Error while loading file!","What a pity :-("]
Return
End If
ST=Start(9) : LE=Length(9)
If Leek(ST)<> Extension_8_0998("FORM") Then REQUEST["Not an IFF file!","Sorry"] : Erase 9 : Return
If Leek(ST+8)<> Extension_8_0998("GEDA") Then REQUEST["Not an GEDA file!","Ooops!"] : Erase 9 : Return
If Leek(ST+4)+8<>LE Then REQUEST["Mangeled IFF-FORM!","Oh no!"] : Erase 9 : Return
AD=ST+12
Repeat
LCH=Leek(AD+4)
CHNK=Leek(AD)
If CHNK= Extension_8_0998("GHED")
GX=Deek(AD+8)
GY=Deek(AD+10)
PL=Peek(AD+12)
PK=Peek(AD+14)
Reserve As Work 11,GX*GY+256+256*4+256*4
CST=Start(11) : BMOF=256*9
Doke CST,GX : Doke CST+2,GY
Doke CST+4,PL
Reserve As Work 10,4096
TST=Start(10)
End If
If CHNK= Extension_8_0998("CMAP")
For A=0 To(LCH/4)-1
Loke CST+256+A*4,Leek(AD+8+A*4)
Next
End If
If CHNK= Extension_8_0998("CHKY")
X=0 : Y=0 : P=0 : PP=1
Copy AD+8,AD+8+LCH To CST+BMOF
End If
If LCH and 1 Then Inc AD
Add AD,LCH+8
Until AD=>ST+LE
Screen 0
Gosub GREY
Return
SAVGEDA:
FILEREQ[-1,480,160,-1,"Enter GEDA file for saving", Extension_8_02F0(FGED$), Extension_8_03E0(FGED$),"","Save","Abort","","PS"]
If Param$="" Then Return
FGED$=Param$
Open Out 1,FGED$
A$="FORM"+ Extension_8_08D2(0)+"GEDA"+"GHED"+ Extension_8_08D2(64)
A$=A$+ Extension_8_08C4(GX)+ Extension_8_08C4(GY)+ Extension_8_08C4(8)+ Extension_8_08C4(0)
A$=A$+ Extension_8_08D2(DISPLAYID)+ Extension_8_08C4(NTSMODE)+ Extension_8_08C4(YOFFSET)
A$=A$+ Extension_8_08D2(0)+ Extension_8_08D2(0)+ Extension_8_08D2(0)+ Extension_8_08D2(0)
A$=A$+ Extension_8_08D2(0)+ Extension_8_08D2(0)+ Extension_8_08D2(0)+ Extension_8_08D2(0)
A$=A$+ Extension_8_08D2(0)+ Extension_8_08D2(0)+ Extension_8_08D2(0)+ Extension_8_08D2(0)
Print #1,A$;
A$="CMAP"+ Extension_8_08D2(256*4)
AD=CST+256
For A=0 To 255
A$=A$+ Extension_8_08D2(Leek(AD))
Add AD,4
Next
Print #1,A$;
Print #1,"CHKY"+ Extension_8_08D2(GX*GY);
LE=GX*GY : AD=CST+BMOF
While LE
Print #1,Peek$(AD,Min(LE,10240));
Add AD,Min(LE,10240)
Add LE,-Min(LE,10240)
Wend
P=Pof(1)
Pof(1)=4
Print #1, Extension_8_08D2(P-8);
Close 1
Return
GREY:
Screen Open 1,GX,GY,16,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Screen To Front 0
For A=0 To 15
Colour A,A*$111
Next
AD=CST+BMOF
For Y=0 To GY-1
For X=0 To GX-1
C=Peek(AD+X+Y*GX)
V=Peek(CST+257+C*4)+Peek(CST+258+C*4)+Peek(CST+259+C*4)
Extension_8_0388 X,Y,Min((V+DIT(X and 3,Y and 3)*3)/48,15)
Next
Next
Return
REACHUNKY:
ST=Start(9) : LE=Length(9)
If Leek(ST)<> Extension_8_0998("FORM") Then REQUEST["Not an IFF file!","Sorry"] : Erase 9 : Return
If Leek(ST+8)<> Extension_8_0998("ILBM") Then REQUEST["Not an ILBM file!","Ooops!"] : Erase 9 : Return
If Leek(ST+4)+8<>LE Then REQUEST["Mangeled IFF-FORM!","Oh no!"] : Erase 9 : Return
AD=ST+12
Repeat
LCH=Leek(AD+4)
CHNK=Leek(AD)
If CHNK= Extension_8_0998("BMHD")
GX=Deek(AD+8)
GY=Deek(AD+10)
PL=Peek(AD+16)
PK=Peek(AD+18)
SX=Deek(AD+24)
SY=Deek(AD+26)
Reserve As Work 11,GX*GY+256+256*4+256*4
CST=Start(11) : BMOF=256*9
Doke CST,GX : Doke CST+2,GY
Doke CST+4,PL
Reserve As Work 10,4096
TST=Start(10)
End If
' If CHNK=Asc.l("CAMG")
' CAMG=Leek(AD+8)
' Print Hex$(CAMG,8)
' Loke CST+8,CAMG
' End If
If CHNK= Extension_8_0998("CMAP")
For A=0 To(LCH/3)-1
RED=Peek(AD+8+A*3)
GRN=Peek(AD+9+A*3)
BLU=Peek(AD+10+A*3)
Poke CST+257+A*4,RED
Poke CST+258+A*4,GRN
Poke CST+259+A*4,BLU
Next
End If
If CHNK= Extension_8_0998("BODY")
X=0 : Y=0 : P=0 : PP=1
If PK
POS=AD+8
Repeat
CON=Peek(POS) : Inc POS
If CON<128
For A=0 To CON
B=Peek(POS) : Gosub BYTEPUT
Inc POS
Next
End If
If CON>128
B=Peek(POS) : Inc POS
For A=0 To 256-CON
Gosub BYTEPUT
Next
End If
Until POS=>AD+8+LCH
If Y<>SY : FAIL=1 : End If
Else
For A=0 To LCH-1
B=Peek(AD+8+A)
Gosub BYTEPUT
Next
End If
End If
If LCH and 1 Then Inc AD
Add AD,LCH+8
Until AD=>ST+LE
Return
BYTEPUT:
If Y=>GY Then FAIL=1 : Y=0
Poke TST,B : Inc TST
Add X,8 : If(X and $FFF8)=>GX Then Inc P : X=0 : TST=Start(10)+P*512
If P=>PL
AA=CST+BMOF+Y*GX
TST=Start(10)
For X=0 To(GX/8)-1
P2C[TST+X,AA+X*8]
Next
DRAPROCBAR[60,Y,GY]
X=0 : Inc Y : P=0 : PP=1
End If
Return
KILGADS:
For A=25 To 60
DISGAD[A]
Next
Return
'Procedure P2C[PLBUF,CHKBUF]
'
'End Proc
Procedure P2C[PLBUF,CHKBUF]
' COMPILED PROCEDURE -- can't convert this to AMOS code
End Proc
Procedure CLRUNDO
Shared UNDOST,REDOST
Reserve As Work 14,20480
UNDOST=Start(14)+8
Loke UNDOST-8,UNDOST+8
Loke UNDOST-4,Start(14)+Length(14)-256
Doke UNDOST,-2 : Doke UNDOST+2,-2 : Doke UNDOST+4,-2 : Doke UNDOST+6,-2
Reserve As Work 13,20480
REDOST=Start(13)+8
Loke REDOST-8,REDOST+8
Loke REDOST-4,Start(13)+Length(13)-256
Doke REDOST,-2 : Doke REDOST+2,-2 : Doke REDOST+4,-2 : Doke REDOST+6,-2
End Proc
Procedure NEWUNDO
Shared UNDOST,REDOST
UNDO=Leek(UNDOST-8)
If Extension_8_0BE4(UNDO-2)<>-1
Loke UNDO,-1 : Loke UNDO+4,-1
Add UNDO,8
End If
If UNDO=>Leek(UNDOST-4)
Copy UNDOST+520,UNDO To UNDOST+8
Loke UNDOST+8,-1 : Loke UNDOST+12,-1
Add UNDO,-512
End If
Loke UNDOST-8,UNDO
Loke REDOST-8,REDOST+8
End Proc
Procedure PLTAUMO[X,Y,T]
Shared AWST,MAPST,MAPMAXX,MAPMAXY
For CW=0 To 31
AD=AWST+CW*64
For A=1 To 14
T1=Deek(AD) : T2=Deek(AD+2) : Add AD,4
Exit If T=>T1 and T<=T2 and T1<>0,2
Next
Next
If CW=32 Then PLT[X,Y,T] : Pop Proc
XB=X : YB=Y
Gosub PUWALL : Gosub ENVMOD
Pop Proc
PUWALL:
Gosub CHKWALL
TYP=F10+F01*2+F21*4+F12*8
T1=Deek(AWST+CW*64+TYP*4) : T2=Deek(AWST+CW*64+TYP*4+2)
If T1=T2
PLT[XB,YB,T1]
Else
PLT[XB,YB,T1+Rnd(T2-T1)]
End If
Return
CHKWALL:
If YB>0
AD=XB+(YB-1)*MAPMAXX : Gosub CHKEX
F10=RE
Else
F10=0
End If
If XB>0
AD=(XB-1)+YB*MAPMAXX : Gosub CHKEX
F01=RE
Else
F01=0
End If
If XB<MAPMAXX-1
AD=(XB+1)+YB*MAPMAXX : Gosub CHKEX
F21=RE
Else
F21=0
End If
If YB<MAPMAXY-1
AD=XB+(YB+1)*MAPMAXX : Gosub CHKEX
F12=RE
Else
F12=0
End If
Return
CHKEX:
T=Deek(MAPST+AD*4)
For A=0 To 15
T1=Deek(AWST+CW*64+A*4) : T2=Deek(AWST+CW*64+A*4+2)
If T=>T1 and T<=T2 Then RE=1 : Return
Next
RE=0
Return
ENVMOD:
XG=XB : YG=YB
G10=F10 : G01=F01 : G21=F21 : G12=F12
If G10 Then XB=XG : YB=YG-1 : Gosub PUWALL
If G01 Then XB=XG-1 : YB=YG : Gosub PUWALL
If G21 Then XB=XG+1 : YB=YG : Gosub PUWALL
If G12 Then XB=XG : YB=YG+1 : Gosub PUWALL
XB=XG : YB=YG
Return
End Proc
Procedure PLT[X,Y,T]
Shared MAPST,MAPMAXX,UNDOST,MAPX,MAPY
AD=MAPST+(X+Y*MAPMAXX)*4
OT=Deek(AD)
If OT=T Then Pop Proc
UNDO=Leek(UNDOST-8)
Doke UNDO,X : Doke UNDO+2,Y : Doke UNDO+4,OT : Doke UNDO+6,Deek(AD+2)
Add UNDO,8
If UNDO=>Leek(UNDOST-4)
Copy UNDOST+520,UNDO To UNDOST+8
Loke UNDOST+8,-1 : Loke UNDOST+12,-1
Add UNDO,-512
End If
Loke UNDOST-8,UNDO
Doke AD,T : Doke AD+2,0
Paste Icon(X-MAPX)*16,(Y-MAPY)*16,T+1
End Proc
Procedure UNDO
Shared MAPST,MAPMAXX,UNDOST,MAPX,MAPY,MO,REDOST
UNDO=Leek(UNDOST-8)
REDO=Leek(REDOST-8)
If Extension_8_0BE4(UNDO-2)=-2 Then REQUEST["No more undo.","Ok"] : Pop Proc
Screen 1
Loke REDO,-1 : Loke REDO+4,-1
Add REDO,8
While Extension_8_0BE4(UNDO-2)=>0
Add UNDO,-8
X=Deek(UNDO) : Y=Deek(UNDO+2) : T=Deek(UNDO+4) : TT=Deek(UNDO+6)
AD=MAPST+(X+Y*MAPMAXX)*4
Loke REDO,Leek(UNDO) : Loke REDO+4,Leek(AD)
Add REDO,8
Doke AD,T : Doke AD+2,TT
If MO=0
Paste Icon(X-MAPX)*16,(Y-MAPY)*16,T+1
End If
Wend
Add UNDO,-8
Loke UNDOST-8,UNDO
Loke REDOST-8,REDO
Screen 0
End Proc
Procedure REDO
Shared MAPST,MAPMAXX,UNDOST,MAPX,MAPY,MO,REDOST
UNDO=Leek(UNDOST-8)
REDO=Leek(REDOST-8)
If Extension_8_0BE4(REDO-2)=-2 Then REQUEST["No more redo.","Ok"] : Pop Proc
Screen 1
Loke UNDO,-1 : Loke UNDO+4,-1
Add UNDO,8
While Extension_8_0BE4(REDO-2)=>0
Add REDO,-8
X=Deek(REDO) : Y=Deek(REDO+2) : T=Deek(REDO+4) : TT=Deek(REDO+6)
AD=MAPST+(X+Y*MAPMAXX)*4
Loke UNDO,Leek(REDO) : Loke UNDO+4,Leek(AD)
Add UNDO,8
Doke AD,T : Doke AD+2,TT
If MO=0
Paste Icon(X-MAPX)*16,(Y-MAPY)*16,T+1
End If
Wend
Add REDO,-8
Loke REDOST-8,REDO
Loke UNDOST-8,UNDO
Screen 0
End Proc
Procedure FILEREQNOTIFY
Shared FIL$()
FIL$(0)=""
End Proc
Procedure FILEREQ[SN,SX,SY,YP,T$,F$,D$,PAT$,OK$,FAIL$,FON$,OP$]
Shared FIL$(),MXFILES
OTH=TH
Gosub INIT
Gosub SETUPSCREEN
Gosub REFRESH
Multi Wait : Limit Mouse
OMK=0 : EXA=0 : ENT=0
Do
If Timer>25 and RDIR=1
Sort FIL$(0)
Gosub REFRESH
Timer=0
End If
Repeat
If RDIR Then Gosub EXAMINDIR Else Multi Wait
Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If MK=2 Then Gosub DEVLIST
If I$<>"" and ENT>0
STRGAD[ENT,I$]
If Param=-1
If ENT=6
F$=Mid$(FB$(6),2) : BT=4
FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
Exit
End If
If ENT=7
DD$=D$
D$=Mid$(FB$(7),2)
If Exist(D$)
Gosub NEWREAD
Else
REQUEST["Directory "+D$+" not found!","Oh sorry!"]
D$=DD$
NEWTEX[7,"{"+D$]
End If
End If
If ENT=8
PAT$=Mid$(FB$(8),2)
Gosub NEWREAD
End If
ENT=0
End If
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,1,15]
BT=Param
End If
If BT and ENT Then NEWTEX[ENT,FB$(ENT)] : ENT=0
If BT=1 Then Gosub DRAGSCREEN
If BT=11 Then Gosub SELECT
If BT=2 or BT=4 or BT=5
If RDIR
FIL$(0)=""
Else
FIL$(0)= Extension_8_08C4(FILOFF)+ Extension_8_08C4(MXNAMLEN)+RDIR$
End If
Exit
End If
If BT=3 Then Amos To Back
If BT>5 and BT<9 Then ENT=BT : STRGAD[BT,""]
If BT=9 Then Gosub DEVLIST
If BT=10 Then Gosub PARDIR
If BT=12 Then Gosub DRAGSLIDER
If BT=13 Then Gosub ARROWUP
If BT=14 Then Gosub ARROWDOWN
If BT=15 Then Gosub FLIPPAGE
OMK=MK
Loop
Screen Close SN
For A=1 To 15
DISGAD[A]
Next
If BT=4 Then A$= Extension_8_03EC(D$)+F$ Else A$=""
TH=OTH
Trap Limit Mouse
Pop Proc[A$]
INIT:
If SN<0
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
End If
If T$="" Then T$="AMCAF File Selector"
If D$="" Then D$= Extension_8_03E0(Dir$)
If Instr(OP$,"P") Then PAT=1 Else PAT=0
If Instr(OP$,"R") Then FIL$(0)=""
If Instr(OP$,"D") Then DIONLY=1 Else DIONLY=0
If Instr(OP$,"Q") Then QUICK=1 Else QUICK=0
If Instr(OP$,"S") Then SAVREQ=1 Else SAVREQ=0
KICK=Deek(Leek(4)+20)
If KICK<37 Then PAT=0
SX=Max(Min((SX+15) and $FFE0,640),160)
SY=Max(Min(SY,256),96)
If YP<40 Then YP=168-SY/2
If FIL$(0)<>""
RDIR$=Mid$(FIL$(0),5)
If D$<>RDIR$
FIL$(0)=""
RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
Return
Else
SELFIL=-1
FILOFF= Extension_8_098C(FIL$(0))
End If
For A=1 To MXFILES
Exit If FIL$(A)=Chr$(255)
Next
NUMFIL=A-1
MXNAMLEN= Extension_8_098C(Mid$(FIL$(0),3))
RDIR=0
Else
RDIR=1 : NUMFIL=0 : FILOFF=0 : SELFIL=-1
MXNAMLEN=0
End If
Return
SETUPSCREEN:
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,YP,SX,SY
If FON$<>""
A=Val(Left$(FON$,2))
If A>0
Trap Extension_8_05B0 Mid$(FON$,3),A
If Errtrap=0
TH=A
End If
End If
End If
Gr Writing 0
DEFCLOWIN[2,0,0]
FILBOX[0,TH+3,SX-1,SY-1,0]
DEFTEX[1,19,0,SX-24,TH+2,"{"+T$,3]
DEFSCRTBK[3,SX-23,0]
A=Text Length("Pattern:")+8
If DIONLY=0
DEFTEX[6,A,SY-TH*2-9,SX-5,SY-TH-7,"{"+F$,7]
TEX[4,FB(6,1),FB(6,0),FB(6,3),"}File:"]
FY2=SY-TH*3-13
Else
FY2=SY-TH*2-9
End If
DEFTEX[7,A,FY2,SX-5,FY2+TH+2,"{"+D$,7]
TEX[4,FB(7,1),FB(7,0),FB(7,3),"}Dir:"]
If PAT
DEFTEX[8,A,FY2-TH-4,SX-5,FY2-2,"{"+PAT$,7]
TEX[4,FB(8,1),FB(8,0),FB(8,3),"}Pattern:"]
FY2=FB(8,1)-2
Else
FY2=FB(7,1)-2
End If
DEFTEX[4,4,SY-TH-5,SX/4-2,SY-3,OK$,1]
DEFTEX[9,SX/4+1,SY-TH-5,SX/2-3,SY-3,"Devices",1]
DEFTEX[10,SX/2,SY-TH-5,SX/2+SX/4-4,SY-3,"Parent",1]
If Right$(D$,1)=":" Then DEAGAD[10]
DEFTEX[5,SX/2+SX/4-1,SY-TH-5,SX-5,SY-3,FAIL$,1]
DEFARROWU[13,SX-22,FY2-17]
DEFARROWD[14,SX-22,FY2-8]
D=(FY2-TH-9)
MXLIN=D/TH
FY1=TH+7+(D-TH*MXLIN)/2
DEFBOX[15,SX-22,TH+5,SX-5,FY2-18,3]
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
PARDIR:
If Right$(D$,1)=":" Then Return
If RDIR Then Extension_8_0660
D$= Extension_8_03E0(D$)
Gosub NEWREAD
Return
NEWREAD:
If RDIR Then Extension_8_0660
NEWTEX[7,"{"+D$]
EXA=0 : RDIR=1 : Gosub EXAMINDIR
If Right$(D$,1)=":" Then DEAGAD[10] Else ACTGAD[10]
ACTGAD[9]
Return
DEVLIST:
If RDIR=1 or Left$(FIL$(NUMFIL),1)=>"A" Then Return
FILOFF=NUMFIL
F$=Dev First$("")
While NUMFIL<MXFILES and(F$<>"")
F$=Mid$(F$,2,Instr(F$,":")-1)
TYP= Extension_8_02D0(F$)
If TYP=0
MXNAMLEN=Max(MXNAMLEN,Len(F$))
Request Off
Trap Extension_8_0672 F$
A=Errtrap
Request On
If A=0
NAM$= Extension_8_06D8
SOR$="A"+Upper$(F$)+Chr$(0)+" <Dev> "+F$+Chr$(0)+" ("+NAM$+") "
Else
SOR$="A"+Upper$(F$)+Chr$(0)+" <Dev> "+F$+Chr$(0)+" "+ Extension_8_0522( Extension_8_0532 )
End If
Inc NUMFIL
FIL$(NUMFIL)=SOR$
End If
If TYP=1
MXNAMLEN=Max(MXNAMLEN,Len(F$))
Inc NUMFIL
FIL$(NUMFIL)="B"+Upper$(F$)+Chr$(0)+" <Dir> "+F$+Chr$(0)+" Assign"
End If
F$=Dev Next$
Wend
Sort FIL$(0)
FILOFF=Min(FILOFF,NUMFIL-MXLIN)
Gosub REFRESH
DEAGAD[9]
Return
SELECT:
Y=YM-FY1
If Y<0 or Y>=FY1+MXLIN*TH Then Return
F=Y/TH+FILOFF+1
If F>NUMFIL Then Return
TYP=Asc(FIL$(F))
A$=Peek$(Varptr(FIL$(F))+Instr(FIL$(F),Chr$(0))+8,40,Chr$(0))
If TYP=32
D$= Extension_8_03EC(D$)+A$
Gosub NEWREAD
End If
If TYP=45
F$=A$
NEWTEX[6,"{"+F$]
If SELFIL<>F
If SELFIL-FILOFF=>0 and SELFIL-FILOFF<=MXLIN
A=SELFIL-FILOFF-1 : SELFIL=-1
Gosub LISTFILE
End If
SELFIL=F : A=SELFIL-FILOFF-1 : Timer=0
Gosub LISTFILE
Else
If Timer<50 and SAVREQ=0
BT=4
End If
End If
End If
If TYP=65 or TYP=66
D$=A$ : Gosub NEWREAD
End If
Return
DRAGSCREEN:
PUSHGAD[BT]
A=YM
Limit Mouse X Hard(0),40+A To X Hard(SX-1),296-SY+A
Repeat
If RDIR : Gosub EXAMINDIR : Else Multi Wait : End If
YM=Y Screen(Y Mouse)-A : MK=Mouse Key : I$=Inkey$
Add YP,YM
Screen Display SN,,YP,,
Until MK<>1
Multi Wait : Limit Mouse
OMK=1
RELEGAD[BT]
Return
ARROWUP:
PUSHGAD[BT]
Repeat
Multi Wait
MK=Mouse Key : I$=Inkey$
If FILOFF>0
Dec FILOFF
Gosub SCROLFILES
End If
Until MK<>1
RELEGAD[BT]
Return
ARROWDOWN:
PUSHGAD[BT]
Repeat
Multi Wait
MK=Mouse Key : I$=Inkey$
If FILOFF<NUMFIL-MXLIN
Inc FILOFF
Gosub SCROLFILES
End If
Until MK<>1
RELEGAD[BT]
Return
DRAGSLIDER:
DISGAD[12]
O=YM-FB(12,1)
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
DRAGSLIDER[15,YM-O,MXLIN,NUMFIL,12]
If NUMFIL>MXLIN
FILOFF=Param
Gosub SCROLFILES
End If
Until MK<>1
ENAGAD[12]
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
OMK=1
Return
REFRESH:
DEFBOX[11,4,TH+5,SX-25,FY2,7]
If NUMFIL>0
For A=0 To Min(MXLIN-1,NUMFIL-1)
Gosub LISTFILE
Next
OLDOFF=FILOFF
End If
If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
SCROLFILES:
If OLDOFF=FILOFF Then Return
X1=FB(11,0)+2 : X2=FB(11,2)-2 : Y1=FY1+1 : Y2=FY1+TH*MXLIN+1
D=FILOFF-OLDOFF
If Abs(D)>MXLIN-2 Then Gosub REFRESH : Return
If D>0
Screen Copy SN,X1,Y1+D*TH,X2,Y2 To SN,X1,Y1
For A=MXLIN-D To MXLIN-1
Gosub LISTFILE
Next
Else
Screen Copy SN,X1,Y1,X2,Y2+D*TH To SN,X1,Y1-D*TH
For A=0 To -D-1
Gosub LISTFILE
Next
End If
OLDOFF=FILOFF
If FB(12,4) and 1 Then DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
FLIPPAGE:
If NUMFIL<MXLIN Then Return
If YM>(FB(12,1)+FB(12,3))/2
FILOFF=Min(FILOFF+MXLIN,NUMFIL-MXLIN)
Else
FILOFF=Max(FILOFF-MXLIN,0)
End If
Gosub REFRESH
DRASLIDER[15,FILOFF,MXLIN,NUMFIL,12]
Return
LISTFILE:
If QUICK
A$=FIL$(A+FILOFF+1)
A$=Peek$(Varptr(A$)+Instr(A$,Chr$(0)),40,Chr$(0))
Else
A$=FIL$(A+FILOFF+1)
B$=Mid$(A$,Instr(A$,Chr$(0))+1)
FIL$=Left$(B$,Instr(B$,Chr$(0))-1)
RES$=Mid$(B$,Len(FIL$)+2)
A$=FIL$+Space$(MXNAMLEN-(Len(FIL$)-8))+RES$
End If
If Asc(FIL$(A+FILOFF+1))<>45
TEX2[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
Else
TEX[6,FY1+A*TH,SX-28,FY1+(A+1)*TH+1,"{"+A$]
End If
If A+FILOFF+1=SELFIL
Gr Writing 2
Ink 2 : Bar 8,FY1+A*TH+1 To SX-29,FY1+(A+1)*TH
Gr Writing 0
End If
Return
EXAMINDIR:
If EXA=0
FILOFF=0 : NUMFIL=0 : MXNAMLEN=5 : RDIR$=D$
SELFIL=-1
For A=1 To MXFILES
FIL$(A)=Chr$(255)
Next
Trap Extension_8_063A D$
If Errtrap=0
EXA=1 : Timer=0
Else
Gosub REFRESH
REQUEST[ Extension_8_0522( Extension_8_0532 )+"!","Cancel"]
RDIR=0 : Return
End If
End If
If NUMFIL=MXFILES
Extension_8_0660
Sort FIL$(0)
RDIR=0
Gosub REFRESH
Return
End If
FIL$= Extension_8_064C
If FIL$=""
Sort FIL$(0)
Timer=0 : RDIR=0 : Gosub REFRESH
Return
End If
TYP= Extension_8_0688
If QUICK=0
DATE$=Mid$( Extension_8_0F0A( Extension_8_06F4 ),4)+" "+ Extension_8_0F1A( Extension_8_070E )
COM$= Extension_8_0762
FLAG$= Extension_8_0728( Extension_8_0742 )
End If
If TYP<0
If DIONLY=0
If KICK>36
A= Extension_8_0300(FIL$,PAT$)
Else
A=-1
End If
Else
A=0
End If
If A
MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
SIZE$= Extension_8_0EC8( Extension_8_06A2 ,7)
Inc NUMFIL
If QUICK
FIL$(NUMFIL)="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)
Else
SOR$="-"+Upper$(FIL$)+Chr$(0)+SIZE$+" "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
FIL$(NUMFIL)=SOR$
End If
End If
Else
MXNAMLEN=Max(MXNAMLEN,Len(FIL$))
Inc NUMFIL
If QUICK
FIL$(NUMFIL)=" "+Upper$(FIL$)+Chr$(0)+" <Dir> "+FIL$+Chr$(0)
Else
SOR$=" "+Upper$(FIL$)+Chr$(0)+" <Dir> "+FIL$+Chr$(0)+DATE$+" "+FLAG$+" "+COM$
FIL$(NUMFIL)=SOR$
End If
End If
Return
End Proc
Procedure REQUEST[T$,OP$]
Dim LIN$(20)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=32+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
OLDSCR=Screen
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[15+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,15+OPT]
BT=Param
End If
Exit If BT
OMK=MK
Loop
For A=1 To OPT
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
End Proc[BT-16]
Procedure NUMENT[T$,OP$,DEFNUM,LOWER,UPPER]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=48+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+Mid$(Str$(DEFNUM),2),7]
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
STRGAD[16,""]
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=17
If I$<>""
If I$<" " or(I$>="0" and I$<="9")
If Not(I$="0" and NUM=0)
STRGAD[16,I$]
Exit If Param=-1
End If
End If
End If
NUM=Val(Mid$(FB$(16),2))
If NUM<LOWER
NUM=LOWER
NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
STRGAD[16,""]
End If
If NUM>UPPER
NUM=UPPER
NEWTEX[16,"{"+Mid$(Str$(NUM),2)]
STRGAD[16,""]
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,16+OPT]
BT=Param
End If
Exit If BT>16
OMK=MK
Loop
For A=1 To OPT+1
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
A$= Extension_8_0EB8(BT-17,1)+Mid$(Str$(NUM),2)
End Proc[A$]
Procedure TXTENT[T$,OP$,DEFTXT$,NUMLET]
Dim LIN$(10)
OPT=1 : OTH=TH
For A=1 To Len(OP$)
If Mid$(OP$,A,1)="|" Then Inc OPT
Next
If Screen=-1
TH=8
SX=Max(Len(OP$)*8+OPT*32+8+15,320) and $FE0
LPR=SX/8-2
Else
SX=Max(Text Length(OP$)+OPT*32+8+15,320) and $FE0
LPR=SX/Text Length("M")-2
End If
LI=0 : LP=1 : LILE=0
For A=1 To Len(T$)
P=Asc(Mid$(T$,A,1))
Inc LILE
If LILE>LPR
LIN$(LI)=Mid$(T$,LP,SP-LP+1)
LP=SP+2 : LILE=A-LP
Inc LI
End If
If P=32 Then SP=A-1
If P=167 Then LILE=LPR+2 : SP=A-1
Next
LIN$(LI)=Mid$(T$,LP) : Inc LI
NBLI=LI-1
SY=48+LI*TH
If Screen=-1
SN=0
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Palette 0,$FFF,$AAA,$666
Colour 17,$BDF : Colour 18,$6F : Colour 19,$12
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
OLDSCR=-1
XP=0 : YP=0
Else
If Screen Height<SY or Screen Width<SX or Screen Colour<4
For A=0 To 7
Trap Screen A
If Errtrap : SN=A : Exit : End If
Next
OLDSCR=Screen
Screen Open SN,SX,SY,4,$8000
Curs Off : Flash Off : Paper 2 : Pen 1 : Cls 0
Get Palette OLDSCR
Screen Display SN,288-SX/4,168-SY/2,SX,SY
Gr Writing 0
Wait Vbl : Limit Mouse
XP=0 : YP=0
Else
XP=(Screen Width-SX)/2
YP=(Screen Height-SY)/2
SN=-1
Get Cblock 9,XP-4,YP-2,SX+16,SY+4
DRABOX[XP-4,YP-2,XP+SX+3,YP+SY+1,0]
DRABOX[XP-2,YP-1,XP+SX+1,YP+SY,1]
Limit Mouse X Hard(XP),Y Hard(YP) To X Hard(XP+SX-1),Y Hard(YP+SY-1)
End If
End If
FILBOX[XP,YP,XP+SX-1,YP+SY-1,0]
For A=0 To NBLI
TEX[XP+4,YP+4+A*TH,XP+SX-5,YP+12+A*TH,LIN$(A)]
Next
DEFTEX[16,XP+4,YP+SY-TH*2-18,XP+SX-5,YP+SY-TH-16,"{"+DEFTXT$,7]
OP=0
For A=1 To OPT
NP=Instr(OP$,"|",OP+1) : If NP=0 Then NP=Len(OP$)+1
T$=Mid$(OP$,OP+1,NP-OP-1)
X1=XP+4+((A-1)*(SX-6))/OPT
X2=XP+1+(A*(SX-6))/OPT
DEFTEX[16+A,X1,YP+SY-TH-14,X2,YP+SY-3,T$,1]
OP=NP
Next
OMK=0
STRGAD[16,""]
Do
Repeat : Multi Wait : Until Amos Here
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
BT=17
If I$<>""
STRGAD[16,I$]
Exit If Param=-1
End If
TXT$=Mid$(FB$(16),2)
If Len(TXT$)>NUMLET
NEWTEX[16,"{"+Left$(TXT$,NUMLET)]
STRGAD[16,""]
End If
BT=0
If MK=1 and OMK<>1
CHKMOUSE[XM,YM,16,16+OPT]
BT=Param
End If
Exit If BT>16
OMK=MK
Loop
For A=1 To OPT+1
DISGAD[15+A]
Next
Limit Mouse
If SN>-1
Screen Close SN
If OLDSCR>-1
Screen OLDSCR
End If
Else
Put Cblock 9
Del Cblock 9
End If
TH=OTH
A$= Extension_8_0EB8(BT-17,1)+TXT$
End Proc[A$]
Procedure CHKMOUSE[XM,YM,LL,UL]
For BT=LL To UL
If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) and(FB(BT,4) and 1) Then Exit
Next
If BT>UL Then Pop Proc[0]
If FB(BT,4) and 2 Then Pop Proc[BT]
OST=-1 : AA=0
ST= Extension_8_093A(FB(BT,4) and 4,2)
Repeat
Multi Wait
XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key : I$=Inkey$
If XM=>FB(BT,0) and XM<=FB(BT,2) and YM=>FB(BT,1) and YM<=FB(BT,3) Then A=1 Else A=0
If AA<>A Then AA=A : ST=1-ST
If OST<>ST
If ST
PUSHGAD[BT]
Else
RELEGAD[BT]
End If
OST=ST
End If
Until MK<>1
If A=0 Then Pop Proc[0]
If ST
RELEGAD[BT]
Else
PUSHGAD[BT]
End If
End Proc[BT]
Procedure DEFTEX[BT,X1,Y1,X2,Y2,T$,FL]
TEXBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2),T$]
DEFGAD[BT,X1,Y1,X2,Y2,FL]
FB$(BT)=T$
End Proc
Procedure DEFBOX[BT,X1,Y1,X2,Y2,FL]
FILBOX[X1,Y1,X2,Y2, Extension_8_093A(FL and 4,2)]
DEFGAD[BT,X1,Y1,X2,Y2,FL]
End Proc
Procedure DEFGAD[BT,X1,Y1,X2,Y2,FL]
FB(BT,0)=X1 : FB(BT,1)=Y1
FB(BT,2)=X2 : FB(BT,3)=Y2
FB(BT,4)=FL
FB$(BT)=""
End Proc
Procedure DEAGAD[BT]
If(FB(BT,4) and 1)=0 Then Pop Proc
FB(BT,4)=FB(BT,4) and $FE
Set Pattern 2
Ink 3 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
Set Pattern 0
End Proc
Procedure ACTGAD[BT]
If FB(BT,4) and 1 Then Pop Proc
CLRGAD[BT]
FB(BT,4)=FB(BT,4) or 1
If FB$(BT)<>""
TEXBOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2),FB$(BT)]
Else
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3), Extension_8_093A(FB(BT,4) and 4,2)]
End If
End Proc
Procedure DISGAD[BT]
FB(BT,4)=FB(BT,4) and $FE
End Proc
Procedure ENAGAD[BT]
FB(BT,4)=FB(BT,4) or 1
End Proc
Procedure CLRGAD[BT]
FB(BT,4)=FB(BT,4) and $FE
Ink 2 : Bar FB(BT,0),FB(BT,1) To FB(BT,2),FB(BT,3)
End Proc
Procedure PUSHGAD[BT]
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),1]
End Proc
Procedure RELEGAD[BT]
DRABOX[FB(BT,0),FB(BT,1),FB(BT,2),FB(BT,3),0]
End Proc
Procedure FILBOX[X1,Y1,X2,Y2,SE]
Ink 2 : Bar X1+2,Y1+1 To X2-2,Y2-1
Extension_8_0388 X1,Y2,2
Extension_8_0388 X2,Y1,2
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure NEWTEX[BT,T$]
FB$(BT)=T$
TEX[FB(BT,0)+1,FB(BT,1),FB(BT,2)-1,FB(BT,3),T$]
End Proc
Procedure TEXBOX[X1,Y1,X2,Y2,SE,T$]
TEX[X1+1,Y1,X2-1,Y2,T$]
Extension_8_0388 X1,Y2,2 : Extension_8_0388 X2,Y1,2
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure TEX[X1,Y1,X2,Y2,T$]
If Asc(T$)=123
M=1 : T$=Mid$(T$,2)
Else
If Asc(T$)=125
M=2 : T$=Mid$(T$,2)
Else
M=0
End If
End If
TL=Text Length(T$)
While TL>(X2-X1)-4
T$=Left$(T$,Len(T$)-1)
TL=Text Length(T$)
Wend
If M=1
X=X1+4 : Y=Y1+1
Else
If M=2
X=X2-Text Length(T$)-2 : Y=Y1+1
Else
X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+2)/2
End If
End If
If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
Ink 0 : Text X,Y+Text Base,T$
End Proc
Procedure TEX2[X1,Y1,X2,Y2,T$]
If Asc(T$)=123
M=1 : T$=Mid$(T$,2)
Else
If Asc(T$)=125
M=2 : T$=Mid$(T$,2)
Else
M=0
End If
End If
TL=Text Length(T$)
While TL>(X2-X1)-4
T$=Left$(T$,Len(T$)-1)
TL=Text Length(T$)
Wend
If M=1
X=X1+4 : Y=Y1+1
Else
If M=2
X=X2-Text Length(T$)-2 : Y=Y1+1
Else
X=(X1+X2-TL)/2 : Y=(Y1+Y2-TH+1)/2
End If
End If
If Y2>0 Then Ink 2 : Bar X1+1,Y1+1 To X2-1,Y2-1
Ink 1 : Text X,Y+Text Base,T$
End Proc
Procedure DRABOX[X1,Y1,X2,Y2,SE]
Ink 1+SE*2 : Draw X1,Y2-1 To X1,Y1 : Draw To X2-1,Y1 : Draw X1+1,Y2-1 To X1+1,Y1
Ink 3-SE*2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1 : Draw X2-1,Y2 To X2-1,Y1+1
End Proc
Procedure STRGAD[BT,I$]
Shared POS
A$=FB$(BT)
If I$=""
POS=Len(A$)-1
End If
If I$>Chr$(31) Then A$=Left$(A$,POS+1)+I$+Mid$(A$,POS+2) : Inc POS
If I$=Chr$(8) and POS>0 Then A$=Left$(A$,POS)+Mid$(A$,POS+2) : Dec POS
If I$=Cleft$ and POS>0 Then Dec POS
If I$=Cright$ and POS<Len(A$)-1 Then Inc POS
If I$=Chr$(13)
NEWTEX[BT,A$]
Pop Proc[-1]
End If
NEWTEX[BT,A$]
X1=FB(BT,0)+5+Text Length(Mid$(A$,2,POS)) : Y1=FB(BT,1)+1
X2=X1+Max(Text Length(Mid$(A$,POS+2,1)),4)
If X2<FB(BT,2)-4
Gr Writing 2
Ink 3 : Bar X1,Y1 To X2-1,Y1+TH-1
Gr Writing 0
End If
End Proc[0]
Procedure DEFCLOWIN[BT,X,Y]
DRACLOWIN[X,Y]
DEFGAD[BT,X,Y,X+18,Y+TH+2,1]
End Proc
Procedure DRACLOWIN[X,Y]
FILBOX[X,Y,X+18,Y+TH+2,0]
Ink 0 : Box 7+X,3+Y To 11+X,Y+TH-1
End Proc
Procedure DEFSCRTBK[BT,X,Y]
DRASCRTBK[X,Y]
DEFGAD[BT,X,Y,X+22,Y+TH+2,1]
End Proc
Procedure DRASCRTBK[X,Y]
FILBOX[X,Y,X+22,Y+TH+2,0]
Ink 0 : Box 4+X,2+Y To 14+X,Y+TH/2+2
Ink 2 : Bar 8+X,Y+TH/2 To 18+X,Y+TH
Ink 0 : Box 8+X,Y+TH/2 To 18+X,Y+TH
End Proc
Procedure DEFARROWU[BT,X,Y]
DRAARROWU[X,Y]
DEFGAD[BT,X,Y,X+17,Y+8,3]
End Proc
Procedure DRAARROWU[X,Y]
DRABOX[X,Y,X+17,Y+8,0]
Extension_8_1016 X+4,Y+6 To X+8,Y+2,0
Extension_8_1016 X+5,Y+6 To X+8,Y+3,0
Extension_8_1016 X+9,Y+2 To X+13,Y+6,0
Extension_8_1016 X+9,Y+3 To X+12,Y+6,0
End Proc
Procedure DEFARROWD[BT,X,Y]
DRAARROWD[X,Y]
DEFGAD[BT,X,Y,X+17,Y+8,3]
End Proc
Procedure DRAARROWD[X,Y]
DRABOX[X,Y,X+17,Y+8,0]
Extension_8_1016 X+4,Y+2 To X+8,Y+6,0
Extension_8_1016 X+5,Y+2 To X+8,Y+5,0
Extension_8_1016 X+9,Y+6 To X+13,Y+2,0
Extension_8_1016 X+9,Y+5 To X+12,Y+2,0
End Proc
Procedure DRAPROCBAR[BT,POS,MX]
X1=FB(BT,0)+2 : X2=FB(BT,2)-2 : Y1=FB(BT,1)+1 : Y2=FB(BT,3)-1
DX=X2-X1
PX=X1+(POS*DX)/MX
If PX>X1 and PX<X2
Ink 0 : Bar X1,Y1 To PX,Y2
Ink 2 : Bar PX,Y1 To X2,Y2
End If
If PX=X1 Then Ink 2 : Bar X1,Y1 To X2,Y2
If PX=X2 Then Ink 0 : Bar X1,Y1 To X2,Y2
End Proc
Procedure DRASLIDER[BT,LINOFF,PAG,NUMLIN,NB]
D=(FB(BT,3)-FB(BT,1))-4
Y1=(LINOFF*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
Y2=((LINOFF+PAG)*D)/Max(NUMLIN,PAG)+FB(BT,1)+2
DEFGAD[NB,FB(BT,0)+4,Y1,FB(BT,2)-4,Y2,3]
Ink 2
If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
If Y2-Y1>0
Ink 0 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
Else
Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,0
End If
End Proc
Procedure DRAGSLIDER[BT,Y,PAG,NUMLIN,NB]
Y1=FB(NB,1) : Y2=FB(NB,3) : D=Y2-Y1
Y1=Min(Max(FB(BT,1)+2,Y),FB(BT,3)-2-D)
Y2=Y1+D : FB(NB,1)=Y1 : FB(NB,3)=Y2
Ink 2
If Y1>FB(BT,1)+2 Then Bar FB(BT,0)+4,FB(BT,1)+1 To FB(BT,2)-4,Y1-1
If Y2<FB(BT,3)-2 Then Bar FB(BT,0)+4,Y2+1 To FB(BT,2)-4,FB(BT,3)-1
If Y2-Y1>0
Ink 1 : Bar FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2
Else
Extension_8_1016 FB(BT,0)+4,Y1 To FB(BT,2)-4,Y2,1
End If
D=FB(BT,3)-FB(BT,1)-4
L=Min(((Y1-FB(BT,1)-2)*Max(NUMLIN,PAG)+D/2)/D,NUMLIN-PAG)
End Proc[L]